home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 24 / CU Amiga Magazine's Super CD-ROM 24 (1998)(EMAP Images)(GB)(Track 1 of 2)[!][issue 1998-07].iso / CUCD / Programming / EasyPLUGINs / source / corners.e < prev    next >
Encoding:
Text File  |  1998-02-09  |  7.3 KB  |  349 lines

  1.  
  2. /*
  3.  
  4.     TO DO:
  5.  
  6. */
  7.  
  8. OPT MODULE, OSVERSION=37
  9.  
  10. ->> corners_plugin: Modules
  11.  
  12. MODULE 'tools/easygui', 'graphics/text',
  13.        'intuition/intuition', 'graphics/rastport',
  14.        'utility', 'utility/tagitem', 'tools/ghost'
  15.  
  16. -><
  17.  
  18. /* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ */
  19.  
  20. ->> corners_plugin: Definitions
  21.  
  22. EXPORT ENUM CORNER_NONE, CORNER_TOPLEFT, CORNER_TOPRIGHT,
  23.             CORNER_LOWERLEFT, CORNER_LOWERRIGHT
  24.  
  25. CONST NUM_CORNERS=CORNER_LOWERRIGHT
  26.  
  27. EXPORT OBJECT corners_plugin OF plugin PRIVATE
  28.  
  29.     width
  30.     height
  31.     box_width
  32.     box_height
  33.     corner
  34.     colour_fg
  35.     colour_bg
  36.     disabled
  37.  
  38.     mouse_x
  39.     mouse_y
  40.  
  41.     corners[NUM_CORNERS]:ARRAY OF LONG
  42.  
  43. ENDOBJECT
  44.  
  45. OBJECT corner
  46.  
  47.     x, y, w, h
  48.  
  49.     rel_x, rel_y
  50.  
  51. ENDOBJECT
  52.  
  53. EXPORT ENUM PLA_Corners_Width=$81070001,    -> [I..]
  54.             PLA_Corners_Height,             -> [I..]
  55.             PLA_Corners_BoxWidth,           -> [ISG]
  56.             PLA_Corners_BoxHeight,          -> [ISG]
  57.             PLA_Corners_ActiveCorner,       -> [ISG]
  58.             PLA_Corners_FGColor,            -> [ISG]
  59.             PLA_Corners_BGColor,            -> [ISG]
  60.             PLA_Corners_Disabled            -> [ISG]
  61.  
  62. -><
  63.  
  64. /* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ */
  65.  
  66. ->> corners_plugin: corners()
  67.  
  68. PROC corners(tags:PTR TO tagitem) OF corners_plugin
  69.  
  70.     DEF a, corner:PTR TO corner
  71.  
  72.     IF utilitybase
  73.  
  74.         self.width      :=  GetTagData(PLA_Corners_Width, 32, tags)
  75.         self.height     :=  GetTagData(PLA_Corners_Height, 24, tags)
  76.         self.box_width  :=  GetTagData(PLA_Corners_BoxWidth, 8, tags)
  77.         self.box_height :=  GetTagData(PLA_Corners_BoxHeight, 6, tags)
  78.         self.corner     :=  GetTagData(PLA_Corners_ActiveCorner, CORNER_NONE, tags)
  79.         self.colour_fg  :=  GetTagData(PLA_Corners_FGColor, 1, tags)
  80.         self.colour_bg  :=  GetTagData(PLA_Corners_BGColor, 0, tags)
  81.         self.disabled   :=  GetTagData(PLA_Corners_Disabled, FALSE, tags)
  82.  
  83.     ELSE
  84.  
  85.         Raise("util")
  86.  
  87.     ENDIF
  88.  
  89.     FOR a:=1 TO NUM_CORNERS
  90.  
  91.         NEW corner
  92.         
  93.         SELECT a
  94.  
  95.             CASE CORNER_TOPLEFT
  96.  
  97.                 corner.rel_x:=0
  98.                 corner.rel_y:=0
  99.  
  100.             CASE CORNER_TOPRIGHT
  101.  
  102.                 corner.rel_x:=self.width - self.box_width
  103.                 corner.rel_y:=0
  104.  
  105.             CASE CORNER_LOWERLEFT
  106.  
  107.                 corner.rel_x:=0
  108.                 corner.rel_y:=self.height - self.box_height
  109.  
  110.             CASE CORNER_LOWERRIGHT
  111.  
  112.                 corner.rel_x:=self.width - self.box_width
  113.                 corner.rel_y:=self.height - self.box_height
  114.  
  115.         ENDSELECT
  116.  
  117.         corner.w:=self.box_width
  118.         corner.h:=self.box_height
  119.  
  120.         self.corners[a-1]:=corner
  121.  
  122.     ENDFOR
  123.  
  124. ENDPROC
  125.  
  126. PROC end() OF corners_plugin
  127.  
  128.     DEF a, corner:PTR TO corner
  129.  
  130.     FOR a:=0 TO (NUM_CORNERS-1)
  131.  
  132.         corner:=self.corners[a]
  133.  
  134.         END corner
  135.  
  136.     ENDFOR
  137.  
  138. ENDPROC
  139.  
  140. -><
  141.  
  142. ->> corners_plugin: set() & get()
  143.  
  144. PROC set(attr, value) OF corners_plugin
  145.  
  146.     SELECT attr
  147.  
  148.         CASE PLA_Corners_BoxWidth
  149.  
  150.             IF (value <> self.box_width) AND (value < self.width)
  151.  
  152.                 self.box_width:=value
  153.  
  154.                 IF self.disabled=FALSE THEN self.draw(self.gh.wnd)
  155.  
  156.             ENDIF
  157.  
  158.         CASE PLA_Corners_BoxHeight
  159.  
  160.             IF (value <> self.box_height) AND (value < self.height)
  161.  
  162.                 self.box_height:=value
  163.  
  164.                 IF self.disabled=FALSE THEN self.draw(self.gh.wnd)
  165.  
  166.             ENDIF
  167.  
  168.         CASE PLA_Corners_ActiveCorner
  169.  
  170.             IF self.corner<>value
  171.  
  172.                 self.corner:=value
  173.  
  174.                 IF self.disabled=FALSE THEN self.draw(self.gh.wnd)
  175.  
  176.             ENDIF
  177.  
  178.         CASE PLA_Corners_FGColor
  179.  
  180.             IF self.colour_fg<>value
  181.  
  182.                 self.colour_fg:=value
  183.  
  184.                 IF self.disabled=FALSE THEN self.draw(self.gh.wnd)
  185.  
  186.             ENDIF
  187.  
  188.         CASE PLA_Corners_BGColor
  189.  
  190.             IF self.colour_bg<>value
  191.  
  192.                 self.colour_bg:=value
  193.  
  194.                 IF self.disabled=FALSE THEN self.draw(self.gh.wnd)
  195.  
  196.             ENDIF
  197.  
  198.         CASE PLA_Corners_Disabled
  199.  
  200.             IF self.disabled<>value
  201.  
  202.                 self.disabled:=value
  203.  
  204.                 self.draw(self.gh.wnd)
  205.  
  206.             ENDIF
  207.  
  208.     ENDSELECT
  209.  
  210. ENDPROC
  211.  
  212. PROC get(attr) OF corners_plugin
  213.  
  214.     SELECT attr
  215.  
  216.         CASE PLA_Corners_BoxWidth;          RETURN self.box_width,  TRUE
  217.         CASE PLA_Corners_BoxHeight;         RETURN self.box_height, TRUE
  218.         CASE PLA_Corners_ActiveCorner;      RETURN self.corner,     TRUE
  219.         CASE PLA_Corners_FGColor;           RETURN self.colour_fg,  TRUE
  220.         CASE PLA_Corners_BGColor;           RETURN self.colour_bg,  TRUE
  221.         CASE PLA_Corners_Disabled;          RETURN self.disabled,   TRUE
  222.  
  223.     ENDSELECT
  224.  
  225. ENDPROC -1, FALSE
  226.  
  227. -><
  228.  
  229. ->> corners_plugin: draw()
  230. PROC draw(win:PTR TO window) OF corners_plugin
  231.  
  232.     DEF corner:PTR TO corner, a
  233.  
  234.     IF win
  235.  
  236.         SetStdRast(win.rport)
  237.  
  238.         Box(self.x, self.y, (self.x+(self.xs-1)), (self.y+(self.ys-1)), self.colour_bg)
  239.  
  240.         IF self.disabled=FALSE
  241.  
  242.             FOR a:=1 TO NUM_CORNERS
  243.  
  244.                 corner:=self.corners[a-1]
  245.  
  246.                 corner.x:=self.x; corner.y:=self.y
  247.  
  248.             ENDFOR
  249.  
  250.             IF self.corner<>CORNER_NONE
  251.  
  252.                 corner:=self.corners[self.corner-1]
  253.  
  254.                 corner.draw(self.colour_fg)
  255.  
  256.             ENDIF
  257.  
  258.         ELSE
  259.  
  260.             ghost(win, self.x, self.y, self.xs, self.ys)
  261.  
  262.         ENDIF
  263.  
  264.     ENDIF
  265.  
  266. ENDPROC
  267. -><
  268.  
  269. ->> corners_plugin: min_size() & will_resize()
  270.  
  271. PROC min_size(font:PTR TO textattr, font_height) OF corners_plugin IS self.width, self.height
  272.  
  273. PROC will_resize() OF corners_plugin IS FALSE
  274.  
  275. -><
  276.  
  277. ->> corners_plugin: render()
  278.  
  279. PROC render(ta:PTR TO textattr, x, y, xs, ys, win:PTR TO window) OF corners_plugin
  280.  
  281.     self.draw(win)
  282.  
  283. ENDPROC 
  284.  
  285. -><
  286.  
  287. ->> corners_plugin: message_test() & message_action()
  288.  
  289. PROC message_test(imsg:PTR TO intuimessage, win:PTR TO window) OF corners_plugin
  290.  
  291.     IF (imsg.class=IDCMP_MOUSEBUTTONS) AND (imsg.code=SELECTDOWN)
  292.  
  293.         IF self.inside_box(imsg.mousex, imsg.mousey)
  294.  
  295.             self.mouse_x:=imsg.mousex
  296.             self.mouse_y:=imsg.mousey
  297.  
  298.             RETURN TRUE
  299.  
  300.         ENDIF
  301.  
  302.     ENDIF
  303.  
  304. ENDPROC FALSE
  305.  
  306. PROC message_action(class, qual, code, win:PTR TO window) OF corners_plugin
  307.  
  308.     DEF corner:PTR TO corner, a
  309.  
  310.     IF (class=IDCMP_MOUSEBUTTONS) AND (code=SELECTDOWN)
  311.  
  312.         FOR a:=1 TO NUM_CORNERS
  313.  
  314.             corner:=self.corners[a-1]
  315.  
  316.             IF corner.inside(self.mouse_x, self.mouse_y) THEN self.set(PLA_Corners_ActiveCorner, a)
  317.  
  318.         ENDFOR
  319.  
  320.     ENDIF
  321.  
  322. ENDPROC TRUE
  323.  
  324. -><
  325.  
  326. /* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ */
  327.  
  328. ->> corners_plugin: private procedures
  329.  
  330. PROC inside_box(x_click, y_click) OF corners_plugin
  331.  
  332. ENDPROC ((x_click >= self.x) AND (x_click <= (self.x + (self.xs -1))) AND
  333.         ((y_click >= self.y) AND (y_click <= (self.y + (self.ys -1)))))
  334.  
  335. PROC inside(x_click, y_click) OF corner
  336.  
  337.     x_click:=x_click - self.x
  338.     y_click:=y_click - self.y
  339.  
  340. ENDPROC ((x_click >= self.rel_x) AND (x_click <= (self.rel_x + self.w)) AND
  341.          (y_click >= self.rel_y) AND (y_click <= (self.rel_y + self.h)))
  342.  
  343. PROC draw(colour) OF corner IS Box(self.x + self.rel_x, self.y + self.rel_y,
  344.                                    (self.x + self.rel_x + self.w) -1 ,
  345.                                    (self.y + self.rel_y + self.h) - 1,
  346.                                    colour)
  347.  
  348. -><
  349.